<?php

class Application_Model_Circuitos extends Sgit_Model
{
    protected $_name = 'circuitos';
    protected $_primary = 'id';


    public function getCircuitos($values)
    {


        //permite pasar unico parametro id del contador
        if(is_numeric($values)){
            $id=$values;unset($values);$values['id']=$id;unset($id);
        } 
        


        $select = $this->getAdapter()->select();
        $select->from(array('circuitos'));
        $select->joinLeft('cuadros', 'cuadros.id = circuitos.id_cuadro', array('cuadro', 'servicio', 'id_cc'));
        $select->joinLeft('proyectos', 'proyectos.id = circuitos.id_proyecto', array('proyecto' => 'nombre', 'orden'));
        $select->joinLeft('contadores', 'contadores.id = circuitos.id_contador', array('codigo', 'id_contador' => 'id'));
        $select->joinLeft('centros_continuidad', 'centros_continuidad.id = cuadros.id_cc', array('cc' => 'nombre'));


 
         if (is_numeric($values['id_zona']))
            $select->where("circuitos.id_zona= ?", $values['id_zona']);
            
         if (is_numeric($values['id_contador']))
            $select->where("circuitos.id_contador= ?", $values['id_contador']);
         if (is_numeric($values['id_proyecto']))
            $select->where("circuitos.id_proyecto= ?", $values['id_proyecto']);
         if (is_array($values['id']))
            $select->where("circuitos.id IN (?)", $values['id']);   
         if (is_numeric($values['id_cuadro']))
            $select->where("circuitos.id_cuadro= ?", $values['id_cuadro']);
         if (is_array($values['id_cuadro']))
            $select->where("circuitos.id_cuadro IN (?)", $values['id_cuadro']);         
         if (is_numeric($values['id_sala']))
            $select->where("circuitos.id_sala= ?", $values['id_sala']);
         if ($values['servicio'])
            $select->where("cuadros.servicio= ?", $values['servicio']);  
         if (is_numeric($values['id_cc']))
            $select->where("cuadros.id_cc= ?", $values['id_cc']);
         if (is_numeric($values['estado']))
            $select->where("circuitos.estado= ?", $values['estado']);  
            

         if ($values['asignacion']=='SI')
            $select->where("circuitos.id_proyecto IS NOT NULL"); 
         if ($values['asignacion']=='NO')
            $select->where("circuitos.id_proyecto IS NULL"); 


         if ($values['codigo'])
            $select->where("circuitos.codigo LIKE ?", "%{$values['codigo']}%");
            
         if (is_numeric($values['limit']))
            $select->limit($values['limit']);  
            
         Sgit_Util_dateRange::run($select,$values['f_alta'],'circuitos.f_alta');
        
                
            
        $select->order(array('cuadro','proyecto', 'position', 'circuito'));


        $rows = $this->getAdapter()->fetchAll($select);


        foreach ($rows as $k => $v)
        {
            if ($v['id_cuadro'])
            {
                $rows[$k]['cuadro'] = array('id'=>$v['id_cuadro'],'cuadro' => $v['cuadro'], 'servicio' => $v['servicio'], 'id_cc' => $v['id_cc'], 'cc' => $v['cc']);
            }
 
          
            if ($v['id_proyecto'])
            {
                $rows[$k]['proyecto'] = array('id'=>$v['id_proyecto'],'nombre' => $v['nombre'], 'orden' => $v['orden']);
                    
            }
             
          
            if ($v['id_contador'])
            {
                $rows[$k]['contador'] = array('id'=>$v['id_contador'],'codigo' => $v['codigo'] );
                
            }
             
           

        }

        if (is_null($id))
            return $rows;
        else
            return $rows[0];

    }

    public function getCircuitosByContadores($contadores)
    {
        

        if(!$contadores) return true;
        


        $select = $this->getAdapter()
        ->select()
        ->from(array('circuitos'))
        ->joinLeft('cuadros', 'cuadros.id = circuitos.id_cuadro', array('cuadro', 'servicio', 'id_cc'))
        ->where("circuitos.id_contador IN (?)", $contadores);    
  
    

         
        $rows = $this->getAdapter()->fetchAll($select);    
        $rows = $this->assocArray2($rows,'id_contador');


        return $rows;

    }



    function getProyectosByCuadro($id_cuadro)
    {

        $select = $this->getAdapter()
        ->select()
        ->from(array('circuitos'), array('id_proyecto', 'c' => new Zend_Db_Expr('COUNT(*)'), ))
        ->joinLeft('proyectos', 'proyectos.id = circuitos.id_proyecto', array('proyecto' => new Zend_Db_Expr("IFNULL(proyectos.nombre,'Libre')")))
        ->where("circuitos.id_cuadro= ?", $id_cuadro)
        ->group("id_proyecto");
        
        $rows = $this->getAdapter()->fetchAll($select);
        $rows = $this->assocArray2($rows, 'id_proyecto');
        return $rows;
    }


    function rearrange($positions)
    {


        $b = explode('&', $positions);

        foreach ($b as $v)
        {
            $c = explode('=', $v);
            $key_value[] = $c[1];
        }

        $updateVals = array();

        foreach ($key_value as $k => $v)
        {
            $strVals[] = ' WHEN ' . (int)$v . ' THEN ' . ((int)$k + 1) . ' ';
        }

        if (!$strVals)
            return;

        $sql = "UPDATE circuitos SET position = CASE id  " . join($strVals) . "  ELSE position END";

        $this->getAdapter()->query($sql);

    }


    function getCCByProyecto($id_proyecto)
    {
        
        
        $select = $this->getAdapter()->select();
        $select->from(array($this->_name),array(''));
        $select->joinLeft('cuadros', 'cuadros.id = circuitos.id_cuadro',array(''));
        $select->joinLeft('centros_continuidad', 'centros_continuidad.id = cuadros.id_cc', array('nombre'));
        $select->group('id_cc');
        $select->where('circuitos.id_proyecto = ?',$id_proyecto);
       
        $rows = $this->getAdapter()->fetchCol($select);
        $rows=array_filter ($rows);
        return $rows;

    }
    
    
    function getCCByProyectosZona($id_zona)
    {
        
        $select = $this->getAdapter()->select();
        $select->from(array($this->_name),array('id_proyecto'));
        $select->joinLeft('cuadros', 'cuadros.id = circuitos.id_cuadro',array(''));
        $select->joinLeft('centros_continuidad', 'centros_continuidad.id = cuadros.id_cc', array('nombre'));
        $select->group('id_proyecto','id_cc');
        $select->where('cuadros.id_zona = ?',$id_zona);
       

        $rows = $this->getAdapter()->fetchAll($select);
        foreach($rows as $v){
            if(is_numeric($v['id_proyecto']))
                $filas[$v['id_proyecto']][]=$v['nombre'];
        }
        
       
        
        return $filas;

    }



}
